home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 April: Mac OS SDK / Dev.CD Apr 96 SDK / Dev.CD Apr 96 SDK1.toast / Development Kits (Disc 1) / OpenDoc / Sample Code / Sample Editors⁄Viewers / Sound Editor / Source / SampleCollections.h < prev    next >
Encoding:
C/C++ Source or Header  |  1995-12-11  |  7.2 KB  |  389 lines  |  [TEXT/MPS ]

  1. /*
  2.     File:        Collections.h
  3.  
  4.     Contains:    Sample collection functions & classes
  5.  
  6.     Written by:    Steve Smith
  7.  
  8.     Copyright:    © 1995 by Apple Computer, Inc., all rights reserved.
  9.  
  10.     Description:
  11.                 CList: Generic unordered list
  12.                 COrderedList: Generic ordered list
  13.                 CFrameList: Unordered list of frames -
  14.                             frames automatically refcounted when 
  15.                             added/removed from list.
  16.                 CQueue: Generic queue collection
  17.                 CStack: Generic stack collection
  18. */
  19.  
  20.  
  21. #ifndef _SAMPLECOLLECTIONS_
  22. #define _SAMPLECOLLECTIONS_
  23.  
  24. // --- OpenDoc Utilities ---
  25.  
  26. #ifndef _LINKLIST_
  27. #include <LinkList.h>
  28. #endif
  29.  
  30. // --- Macintosh Toolbox ---
  31.  
  32. #ifndef _LIMITS_
  33. #include <Limits.h>
  34. #endif
  35.  
  36. //------------------------------------------------------------------------------
  37. // Forwards
  38. //------------------------------------------------------------------------------
  39.  
  40. enum {
  41.     kItemNotFound = -1,
  42.     kListIsEmpty = 0
  43. };
  44.  
  45. //------------------------------------------------------------------------------
  46. // Collection Class Definitions
  47. //------------------------------------------------------------------------------
  48.  
  49. class CGenericLink: public Link {
  50.     public:
  51.     CGenericLink();
  52.     CGenericLink(ODPtr value);
  53.     virtual ~CGenericLink();
  54.     
  55.     ODPtr    GetValue();
  56.     void    SetValue(ODPtr value);
  57.     
  58.     protected:
  59.     ODPtr    fValue;
  60. };
  61.  
  62. class CFrameLink : public CGenericLink {
  63.     
  64.     public:
  65.     CFrameLink();
  66.     CFrameLink(ODFrame* frame);
  67.     virtual ~CFrameLink();
  68.         
  69.     ODFrame*    GetFrame();
  70.     void        SetFrame(ODFrame* frame);
  71. };
  72.  
  73.  
  74. class CList {
  75.     public:
  76.     CList();
  77.     virtual ~CList();
  78.  
  79.       ODBoolean    IsEmpty() const;
  80.     ODULong        Count() const;
  81.       ODBoolean    Contains(const ODPtr value);
  82.       void        DeleteAllLinks();
  83.       void        RemoveAllLinks();
  84.       void        Delete(ODPtr value);
  85.       void        Remove(ODPtr value);
  86.       void        Add(ODPtr value);
  87.             
  88.       private:
  89.       LinkedList        fList;
  90.       
  91.       friend class CListIterator;
  92. };
  93.  
  94. class CListIterator {
  95.     public:
  96.     CListIterator() {}
  97.     CListIterator(CList* list);
  98.     virtual ~CListIterator();
  99.         
  100.     ODPtr        First();
  101.     ODPtr        Next();
  102.     ODPtr        Previous();
  103.     ODPtr        Last();
  104.     ODPtr        Current();
  105.     ODBoolean     IsNotComplete();
  106.     void        RemoveCurrent();
  107.     void        DeleteCurrent();
  108.  
  109.     protected:
  110.     LinkedListIterator*    fIter;
  111. };
  112.  
  113.  
  114. class COrderedList {
  115.     public:
  116.     COrderedList();
  117.     virtual ~COrderedList();
  118.  
  119.       ODBoolean    IsEmpty() const;
  120.     ODULong        Count() const;
  121.       ODBoolean    Contains(const ODPtr value);
  122.       ODUShort    Position(const ODPtr value);
  123.       void        DeleteAllLinks();
  124.       void        RemoveAllLinks();
  125.       void        Delete(ODPtr valeu);
  126.       void        Remove(ODPtr value);
  127.       ODPtr        RemoveFirst();
  128.       ODPtr        RemoveLast();
  129.       void        AddBefore(const ODPtr existing, ODPtr value);
  130.       void        AddAfter(const ODPtr existing, ODPtr value);
  131.       void        AddFirst(ODPtr value);
  132.       void        AddLast(ODPtr value);
  133.       ODPtr        After(const ODPtr value) const;
  134.       ODPtr        Before(const ODPtr value) const;
  135.       ODPtr        First() const;
  136.       ODPtr        Last() const;
  137.             
  138.       private:
  139.       LinkedList        fList;
  140.       
  141.       friend class COrdListIterator;
  142. };
  143.  
  144. class COrdListIterator : public CListIterator {
  145.     public:
  146.     COrdListIterator(COrderedList* list);
  147.     virtual ~COrdListIterator();
  148. };
  149.  
  150.  
  151. class CFrameList {
  152.     public:
  153.     CFrameList();
  154.     virtual ~CFrameList();
  155.  
  156.       ODBoolean    IsEmpty() const;
  157.     ODULong        Count() const;
  158.       ODBoolean    Contains(const ODFrame* frame);
  159.       void        Remove(ODFrame* frame);
  160.       void        Add(ODFrame* frame);
  161.     ODFrame*    GetFrame();
  162.  
  163.       private:
  164.       LinkedList        fList;
  165.     
  166.       friend class CFrameListIterator;
  167. };
  168.  
  169. class CFrameListIterator {
  170.     public:
  171.     CFrameListIterator(CFrameList* list);
  172.     ~CFrameListIterator();
  173.         
  174.     ODFrame*    First();
  175.     ODFrame*    Next();
  176.     ODFrame*    Previous();
  177.     ODFrame*    Last();
  178.     ODFrame*    Current();
  179.     ODBoolean     IsNotComplete();
  180.     void        ReleaseCurrent();
  181.  
  182.     private:
  183.     LinkedListIterator*    fIter;
  184. };
  185.  
  186. class CStack {
  187.     public:
  188.     CStack();
  189.     ~CStack();
  190.     
  191.     ODBoolean    IsEmpty();
  192.     void        EmptyStack(ODBoolean deleteEntries = kODFalse);
  193.     ODUShort    SetSize(ODUShort maxDepth);
  194.     ODBoolean    PushEntry(ODPtr entry);
  195.     ODPtr        PopEntry();
  196.     
  197.     private:
  198.     ODUShort        fMaxDepth;
  199.     LinkedList        fStack;
  200. };
  201.  
  202. class CQueue {
  203.     public:
  204.     CQueue();
  205.     ~CQueue();
  206.  
  207.     ODBoolean    IsEmpty();
  208.     void        EmptyQueue(ODBoolean deleteEntries = kODFalse);
  209.     ODUShort    SetSize(ODUShort maxEntries);
  210.     ODBoolean    AddEntry(ODPtr entry);
  211.     ODPtr        GetEntry();
  212.     
  213.     private:
  214.     ODUShort        fMaxEntries;
  215.     LinkedList        fQueue;
  216. };
  217.  
  218. //-------------------------------------------------------------------
  219. // Inline methods
  220. //-------------------------------------------------------------------
  221.  
  222. //====================================================================
  223. // CGenericLink
  224. //====================================================================
  225.  
  226. inline CGenericLink::CGenericLink()
  227.     :Link()
  228. {
  229.     fValue = kODNULL;
  230. }
  231.  
  232. inline CGenericLink::CGenericLink(ODPtr value)
  233.     :Link()
  234. {
  235.     fValue = value;
  236. }
  237.  
  238. inline CGenericLink::~CGenericLink()
  239. {
  240. }
  241.  
  242. inline ODPtr CGenericLink::GetValue()
  243. {
  244.     return fValue;
  245. }
  246.  
  247. inline void CGenericLink::SetValue(ODPtr value)
  248. {
  249.     fValue = value;
  250. }
  251.  
  252. //====================================================================
  253. // CFrameLink
  254. //====================================================================
  255.  
  256. inline CFrameLink::CFrameLink()
  257.     :CGenericLink()
  258. {
  259. }
  260.  
  261. //====================================================================
  262. // CList
  263. //====================================================================
  264.  
  265. inline CList::CList()
  266. {
  267. }
  268.  
  269. inline CList::~CList()
  270. {
  271.     fList.DeleteAllLinks();
  272. }
  273.  
  274. inline ODBoolean CList::IsEmpty() const
  275. {
  276.     return fList.IsEmpty();
  277. }
  278.  
  279. inline ODULong CList::Count() const
  280. {
  281.     return fList.Count();
  282. }
  283.  
  284. inline void CList::RemoveAllLinks()
  285. {
  286.     fList.RemoveAll();
  287. }
  288.  
  289. //====================================================================
  290. // COrderedList
  291. //====================================================================
  292.  
  293. inline COrderedList::COrderedList()
  294. {
  295. }
  296.  
  297. inline COrderedList::~COrderedList()
  298. {
  299.     fList.DeleteAllLinks();
  300. }
  301.  
  302. inline ODBoolean COrderedList::IsEmpty() const
  303. {
  304.     return fList.IsEmpty();
  305. }
  306.  
  307. inline ODULong COrderedList::Count() const
  308. {
  309.     return fList.Count();
  310. }
  311.  
  312. inline void COrderedList::RemoveAllLinks()
  313. {
  314.     fList.RemoveAll();
  315. }
  316.  
  317. //====================================================================
  318. // COrdListIterator
  319. //====================================================================
  320.  
  321. inline COrdListIterator::COrdListIterator(COrderedList* list)
  322. {
  323.     fIter = new LinkedListIterator(&list->fList);
  324. }
  325.  
  326. inline COrdListIterator::~COrdListIterator()
  327. {
  328. }
  329.     
  330. //====================================================================
  331. // CFrameList
  332. //====================================================================
  333.  
  334. inline CFrameList::CFrameList()
  335. {
  336. }
  337.  
  338. inline ODBoolean CFrameList::IsEmpty() const
  339. {
  340.     return fList.IsEmpty();
  341. }
  342.  
  343. inline ODULong CFrameList::Count() const
  344. {
  345.     return fList.Count();
  346. }
  347.  
  348. //====================================================================
  349. // CStack
  350. //====================================================================
  351.  
  352. inline CStack::CStack()
  353. {
  354.     fMaxDepth = USHRT_MAX;
  355. }
  356.  
  357. inline CStack::~CStack()
  358. {
  359.     fStack.DeleteAllLinks();
  360. }
  361.  
  362. inline ODBoolean CStack::IsEmpty()
  363. {
  364.     return fStack.IsEmpty();
  365. }
  366.  
  367. //====================================================================
  368. // CQueue
  369. //====================================================================
  370.  
  371. inline CQueue::CQueue()
  372. {
  373.     fMaxEntries = USHRT_MAX;
  374. }
  375.  
  376. inline CQueue::~CQueue()
  377. {
  378.     fQueue.DeleteAllLinks();
  379. }
  380.  
  381. inline ODBoolean CQueue::IsEmpty()
  382. {
  383.     return fQueue.IsEmpty();
  384. }
  385.  
  386.  
  387. #endif //_SAMPLECOLLECTIONS_
  388.  
  389.